#ifndef __MEASURE_H__
#define __MEASURE_H__

#include <stdint.h>

/**
 * @brief 模块配置宏定义
 *
 */
#define MEASURE_USE_STATISTICS 1 /* 是否启用统计功能 */

/**
 * @brief 时间测量结构体
 *
 */
typedef struct
{
	uint32_t begin;			 /* 开始时间计数 */
	uint32_t end;			 /* 结束时间计数 */
	uint32_t current;		 /* 当前间隔时间 */
#if MEASURE_USE_STATISTICS
	uint32_t min;			 /* 最小间隔时间 */
	uint32_t max;			 /* 最大间隔时间 */
	uint32_t count : 15;	 /* 测量次数 */
	uint32_t clear : 15;	 /* 清零触发次数 */
	uint32_t reset : 1;	 /* 清零使能 */
#else
	uint32_t reserved : 31;	 /* 保留 */
#endif
	uint32_t inited : 1;	 /* 初始化标志 */
} measure_t;

uint32_t get_us_count(void);
void measure_init(measure_t *pm);
int32_t measure_begin(measure_t*p);
int32_t measure_end(measure_t*p);
int32_t measure_interval(measure_t *pm);

#endif
